package need_learn.coding.huawei;

import java.util.*;

/**
 * TODO 华为：    输入 abababb 输出 b:4,a:3 (按数量顺序)
 *
 * @author david
 * @version 1.0
 * @date 2021/4/20 14:56
 */
public class CharacterCountSort {
    public static void main(String[] args) {
        String str="abababb";
        Map<String ,Integer> map =new HashMap<>();
        for(char s:str.toCharArray()){
            if (map .get(String.valueOf(s)) != null) {
                int j=map .get(String.valueOf(s));
                map .remove(String.valueOf(s));
                map .put(String.valueOf(s),++j);
            }else {
                map .put(String.valueOf(s),1);
            }
        }
        map .forEach((K,V)-> System.out.println(K+"|"+V));

        // 将Map中的数据转存List中，便于 后面工具类Collections的排序处理
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>();
        list.addAll(map.entrySet());
        /**
         * 重写Collections工具类的sort()方法，
         * 对list中的entry，按照value值进行排列
         */
        list.sort(new Comparator<Map.Entry<String, Integer>>() {
            public int compare(Map.Entry<String, Integer> arg0, Map.Entry<String, Integer> arg1) {
                /*
                 * 由少到多【升序】: arg0<---->arg1
                 * retrn arg0.getValue().compareTo(arg1.getValue());
                 */
                // 由多到少【降序】: arg1<---->arg0
                return arg1.getValue().compareTo(arg0.getValue());
            }
        });
        // 循环取用  有序list 中Map.Entry中的数据
        for (Map.Entry<String, Integer> mEntry : list) {
            System.out.println("key:" + mEntry.getKey() + "   value:" + mEntry.getValue());
        }
    }
}
